﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using DECOR.BL.BE;
using DECOR.BL.BC;
using System.Collections.Generic;
using CM.BL.BE;

namespace DECOR.WebApp
{
    public partial class BuscaDoc : System.Web.UI.Page
    {
        private List<PedidoBE> _lstPedidos;

        //private List<GenericBE> getGenericBE(ClienteWS.GenericBE[] p)
        //{
        //    List<GenericBE> g = new List<GenericBE>();
        //    try
        //    {
        //        foreach (ClienteWS.GenericBE i in p)
        //        {
        //            GenericBE n = new GenericBE();
        //            n.Codigo = i.Codigo;
        //            n.Descripcion = i.Descripcion;
        //            g.Add(n);
        //        }

        //    }
        //    catch
        //    {
        //        g = null;
        //    }


        //    return g;
        //}

        //private List<GenericBE> getGenericBE(ParametroWS.GenericBE[] p)
        //{
        //    List<GenericBE> g = new List<GenericBE>();
        //    try
        //    {
        //        GenericBE n0 = new GenericBE();
        //        n0.Codigo = "0";
        //        n0.Descripcion = "";
        //        g.Add(n0);
        //        foreach (ParametroWS.GenericBE i in p)
        //        {
        //            GenericBE n = new GenericBE();
        //            n.Codigo = i.Codigo;
        //            n.Descripcion = i.Descripcion;
        //            g.Add(n);
        //        }
        //    }
        //    catch
        //    {
        //        g = null;
        //    }
        //    return g;
        //}

        private void cargaCombos()
        {
            GenericBE blanco = new GenericBE();
            RfcConfigParametersBE objUsuarioWeb = (RfcConfigParametersBE)Session["UsuarioWeb"];

            List<GenericBE> lstOficinas = new List<GenericBE>();
            List<GenericBE> lstTipoDocumento = new List<GenericBE>();
            List<GenericBE> lstGrupoVendedores = new List<GenericBE>();
            List<GenericBE> lstSectores = new List<GenericBE>();
            List<GenericBE> lstMotivos = new List<GenericBE>();
            List<GenericBE> lstGrupoCond = new List<GenericBE>();
            List<GenericBE> lstBloqueoEntrega = new List<GenericBE>();
            List<GenericBE> lstBloqueoFactura = new List<GenericBE>();
            List<GenericBE> lstVendedores = new List<GenericBE>();
            List<GenericBE> lstCodigoPostal = new List<GenericBE>();
            List<GenericBE> lstTipoVisita = new List<GenericBE>();

            List<GenericBE> lstCanalDistribucion = new List<GenericBE>();
            List<GenericBE> listaOrgVtas = new List<GenericBE>();
            List<GenericBE> listaOficina = new List<GenericBE>();

            if (Session["listaOrgVtas"] == null)
            {
                listaOrgVtas = ClienteBC.Instance.listaOrgVtas("");
                
                Session.Add("listaOrgVtas", listaOrgVtas);
            }
            else
            {
                listaOrgVtas = (List<GenericBE>)Session["listaOrgVtas"];
                
            }

            if (Session["listaCanalDist"] == null)
            {
                
                lstCanalDistribucion = ClienteBC.Instance.listaCanalDist("", "");
                blanco = new GenericBE();
                blanco.Codigo = "";
                blanco.Descripcion = "[Todos]";
                lstCanalDistribucion.Add(blanco);
                Session.Add("listaCanalDist", lstCanalDistribucion);
            }
            else
            {                
                lstCanalDistribucion = (List<GenericBE>)Session["listaCanalDist"];
                //blanco = new GenericBE();
                //blanco.Codigo = "";
                //blanco.Descripcion = "[Todos]";
                //lstCanalDistribucion.Add(blanco);
            }

            if (Session["listar"] == null)
            {
                
                listaOficina = OficinaBC.Instance.listar();
                blanco = new GenericBE();
                blanco.Codigo = "";
                blanco.Descripcion = "[Todos]";
                listaOficina.Add(blanco);
                Session.Add("listar", listaOficina);
            }
            else
            {
                listaOficina = (List<GenericBE>)Session["listar"];
                //blanco = new GenericBE();
                //blanco.Codigo = "";
                //blanco.Descripcion = "[Todos]";
                //listaOficina.Add(blanco);
            }

            List<GenericBE> _lvLstPrioridadEnt = new List<GenericBE>();
            if (Session["CargarCombos"] == null)
            {
                ParametroBC.Instance.getDataDDL(ref lstCodigoPostal, ref lstVendedores,
                ref lstBloqueoEntrega, ref lstBloqueoFactura,
                ref _lvLstPrioridadEnt, ref lstGrupoCond, ref lstGrupoVendedores, ref lstMotivos, ref lstOficinas, ref lstSectores,
                ref lstTipoDocumento, ref lstTipoVisita);

                
                blanco = new GenericBE();
                blanco.Codigo = "";
                blanco.Descripcion = "[Todos]";
                lstOficinas.Add(blanco);
                Dictionary<string, List<GenericBE>> lstCombos = new Dictionary<string, List<GenericBE>>();
                lstCombos.Add("codigoPostal", lstCodigoPostal);
                lstCombos.Add("vendedores", lstVendedores);
                lstCombos.Add("bloqueoEntrega", lstBloqueoEntrega);
                lstCombos.Add("bloqueoFactura", lstBloqueoFactura);
                lstCombos.Add("prioridadEnt", _lvLstPrioridadEnt);
                lstCombos.Add("grupoCond", lstGrupoCond);
                lstCombos.Add("grupoVendedores", lstGrupoVendedores);
                lstCombos.Add("motivos", lstMotivos);
                lstCombos.Add("oficinas", lstOficinas);
                lstCombos.Add("sectores", lstSectores);
                lstCombos.Add("tipoDocumento", lstTipoDocumento);
                lstCombos.Add("tipoVisita", lstTipoVisita);

                Session["CargarCombos"] = lstCombos;
            }

            //LLAMADO AL SERVICIO WEB
            //List<GenericBE> lstTipoDocumento = new List<GenericBE>();
            //ParametroWS.ParametroWS p = new DECOR.WebApp.ParametroWS.ParametroWS();
            //ParametroWS.DataDDLBE dataDDLBE = p.getDataDDL();
            //lstTipoDocumento = getGenericBE(dataDDLBE.LstTipoDoc);   

            //ClienteWS.ClienteWS canalDist = new DECOR.WebApp.ClienteWS.ClienteWS();
            //List<GenericBE> lst = getGenericBE(canalDist.listaCanalDist());

            Dictionary<string, List<GenericBE>> dict = (Dictionary<string, List<GenericBE>>)Session["CargarCombos"];
            if (dict["tipoDocumento"][0].Codigo != " ")
            {
                blanco = new GenericBE();
                blanco.Codigo = " ";
                blanco.Descripcion = " ";
                dict["tipoDocumento"].Insert(0, blanco);
            }
            
            cmbClaseDocumento.DataValueField = "Codigo";
            cmbClaseDocumento.DataTextField = "Descripcion";
            cmbClaseDocumento.DataSource = dict["tipoDocumento"].ToList();// lstTipoDocumento;
            cmbClaseDocumento.DataBind();

            cmbCanal.DataValueField = "Codigo";
            cmbCanal.DataTextField = "Descripcion";
            cmbCanal.DataSource = (List<GenericBE>)Session["listaCanalDist"]; // lst;
            cmbCanal.DataBind();
            cmbCanal.SelectedValue = "";

            //lst = getGenericBE(canalDist.listar());

            cmbOficina.DataValueField = "Codigo";
            cmbOficina.DataTextField = "Descripcion";
            cmbOficina.DataSource = (List<GenericBE>)Session["listar"]; //lst;
            cmbOficina.DataBind();
            cmbOficina.SelectedValue = "";
            
            //lst = getGenericBE(canalDist.listaOrgVtas());

            cmbOrgVtas.DataValueField = "Codigo";
            cmbOrgVtas.DataTextField = "Descripcion";
            cmbOrgVtas.DataSource = (List<GenericBE>)Session["listaOrgVtas"]; // lst;
            cmbOrgVtas.DataBind();
            cmbOrgVtas.SelectedValue = objUsuarioWeb.OrgVentas;

            //RGF 20111011
            string[] tiposDato = ParametroBC.Instance.getParamValue("TipoDato").Split(',');
            string[] tipo;
            ListItem li;
            cmbTipoDato.Items.Clear();
            for (int i = 0; i < tiposDato.Length; i++)
            {
                tipo = tiposDato[i].Split('-');
                li = new ListItem();
                li.Value = tipo[0];
                li.Text = tipo[1];
                cmbTipoDato.Items.Add(li);
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Page.IsPostBack)
                {
                    if (string.IsNullOrEmpty(txtFechaInicio.Text))
                    {
                        txtFechaInicio.Text = DateTime.Today.ToString("dd/MM/yyyy");
                    }
                    if (string.IsNullOrEmpty(txtFechaFin.Text))
                    {
                        txtFechaFin.Text = DateTime.Today.ToString("dd/MM/yyyy");
                    }
                    this.cargaCombos();
                    PersonaBE objPersona = (PersonaBE)Session["PersonaWeb"];
                    if (string.IsNullOrEmpty(txtCodVendedor.Text)) { txtCodVendedor.Text = objPersona.CodPersona; }
                 //   this.buscarPedidos();
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        private void buscarPedidos()
        {
            PersonaBE objPersona = (PersonaBE)Session["PersonaWeb"];
            if (objPersona != null)
            {
                DateTime fecIni = Convert.ToDateTime(txtFechaInicio.Text);
                DateTime fecFin = Convert.ToDateTime(txtFechaFin.Text);
                if (string.IsNullOrEmpty(txtCodVendedor.Text)) { txtCodVendedor.Text = objPersona.CodPersona; }
                string auxCod = txtCodVendedor.Text == "*" ? "0" : txtCodVendedor.Text;

                //this._lstPedidos = PedidoBC.Instance.listaPedidos(txtDatoBusq.Text, auxCod, fecIni, fecFin, cmbOrgVtas.SelectedValue, 
                //                                                  cmbCanal.SelectedValue, cmbOficina.SelectedValue,
                //                                                  txtMaterial.Text);

                //RGF 20111011
                string numDoc = "";
                string refLegal = "";
                string nombreCliente = "";
                string NIF = "";
                string codCliente = "";
                string nombreMaterial = "";

                if (txtDatoBusq.Text.Trim().Length > 0)
                {
                    switch (cmbTipoDato.SelectedValue)
                    {
                        case "1":
                            numDoc = txtDatoBusq.Text;
                            break;
                        case "2":
                            refLegal = txtDatoBusq.Text;
                            break;
                        case "3":
                            nombreCliente = txtDatoBusq.Text;
                            break;
                        case "4":
                            NIF = txtDatoBusq.Text;
                            break;
                        case "5":
                            codCliente = txtDatoBusq.Text;
                            break;
                        case "6":
                            nombreMaterial = txtDatoBusq.Text;
                            break;
                    }
                }

                _lstPedidos = PedidoBC.Instance.listaPedidos(numDoc, auxCod, fecIni, fecFin, cmbOrgVtas.SelectedValue,
                                                                  cmbCanal.SelectedValue, cmbOficina.SelectedValue, refLegal,
                                                                  txtMaterial.Text, nombreCliente, NIF, nombreMaterial, codCliente);
                ////this._lstPedidos = PedidoBC.Instance.listaPedidos(txtDatoBusq.Text, auxCod, fecIni, fecFin, cmbOrgVtas.SelectedValue,
                ////                                                  cmbCanal.SelectedValue, cmbOficina.SelectedValue, txtDatoBusq.Text,
                ////                                                  txtMaterial.Text, txtDatoBusq.Text, txtDatoBusq.Text);

                //if (!txtDatoBusq.Text.Equals(""))
                //{
                //    //--- filtro x nombre
                //    this._lstPedidos = this._lstPedidos.FindAll(X => X.DestFactura.ToUpper().IndexOf(txtDatoBusq.Text.Trim().ToUpper()) >= 0);
                //}
                
                //--- filtro x estados:
                foreach (var indControl in upMain.Controls[0].Controls.OfType<CheckBox>())
                {
                    if (!indControl.Checked)
                    {
                        this._lstPedidos.RemoveAll(X => X.Estado.ToUpper().IndexOf(indControl.Text.ToUpper()) >= 0);
                    }
                }

                //--- todos los tipos de documento 
                if (cmbClaseDocumento.SelectedIndex > 0)
                {
                    this._lstPedidos.RemoveAll(X => X.CodTipoDoc!=cmbClaseDocumento.SelectedValue);
                    //switch (cmbClaseDocumento.SelectedIndex)
                    //{
                    //    case 1:
                    //        this._lstPedidos.RemoveAll(X => ParametroBC.Instance.esTipoOferta(X.CodTipoDoc));
                    //        break;
                    //    case 2:
                    //        this._lstPedidos.RemoveAll(X => !ParametroBC.Instance.esTipoOferta(X.CodTipoDoc));
                    //        break;
                    //}
                }

                //RGF 20111012
                Session["lstPedidos"] = _lstPedidos;
                gvPedidos.PageIndex = 0;
                CargarGrilla();
                //gvPedidos.DataSource = this._lstPedidos;
                //gvPedidos.DataBind();

                if (this._lstPedidos.Count == 0)
                {
                    Session["Mensaje"] = "No se encontró información para los parámetros seleccionados.";
                }
            }
            else
            {
                Response.Redirect("Login.aspx");
            }
        }

        //RGF 20111012
        private void CargarGrilla()
        {
            _lstPedidos = (List<PedidoBE>)Session["lstPedidos"];
            gvPedidos.DataSource = _lstPedidos;
            gvPedidos.DataBind();
        }

        protected void ibtnBuscar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this.buscarPedidos();
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        protected void gvPedidos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = gvPedidos.Rows[index];
                string numPedido = "";
                if (row != null)
                {
                    numPedido = ((Label)row.FindControl("lblNumPedido")).Text;
                    if (e.CommandName == "Editar")
                    {
                        string op = Convert.ToString(Session["Operacion"]);
                        if (string.IsNullOrEmpty(op))
                        {
                            PedidoBE objPedido = PedidoBC.Instance.leer(numPedido);
                            if (objPedido != null)
                            {
                                if (objPedido.Tratado)
                                {
                                    Session["PedidoTratado"] = true;
                                }
                                Session["Operacion"] = "editar";
                                Session["Cliente"] = ClienteBC.Instance.leer(objPedido.CodCliente);
                                Session["Pedido"] = objPedido;
                                Response.Redirect("DocVenta.aspx");
                            }
                        }
                        else
                        {
                            Session["Mensaje"] = "Debe cancelar la operación actual para poder visualizar el pedido.";
                        }
                    }
                    else if (e.CommandName == "Flujo")
                    {
                        if (numPedido.Equals(string.Empty) || numPedido.Equals("0000000000"))
                        {
                            Session["Mensaje"] = "Número de documento inválido.";
                        }
                        else
                        {
                            //string str = "<script type='text/javascript'>var win=window.open('Seguimiento.aspx?np=" + numPedido + "',null,'width=650,height=400,top=50,left=250,status=no,resizable=no,scrollbars=yes','true');</script>";
                            string str = "<script type='text/javascript'>var win=window.open('Seguimiento.aspx?np=" + numPedido + "',null,'width=850,height=500,top=50,left=150,status=no,resizable=no,scrollbars=yes','true');</script>";
                            ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "SEGUIMIENTO", str, false);
                        }
                    }
                    else if (e.CommandName == "Detalle")
                    {
                        PedidoBE objPedido = PedidoBC.Instance.leer(numPedido);
                        GenericBE objTmp = null;
                        List<GenericBE> lstMotivRec = null;

                        foreach (DetalleBE itm in objPedido.Detalle)
                        {
                            if (!string.IsNullOrEmpty(itm.MotivoRechazo))
                            {
                                if (lstMotivRec == null) { lstMotivRec = PedidoBC.Instance.listarMotivosRechazo(); }
                                objTmp = lstMotivRec.Find(X => X.Codigo == itm.MotivoRechazo);
                                itm.MotivoRechazo = objTmp != null ? (objTmp.Codigo + "-" + objTmp.Descripcion).Trim() : itm.MotivoRechazo;
                            }
                        }

                        GridView gvTmp = (GridView)row.FindControl("gvDetalle");
                        gvTmp.DataSource = objPedido.Detalle;
                        gvTmp.DataBind();
                    }
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        //RGF 20111012
        protected void gvPedidos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                gvPedidos.PageIndex = e.NewPageIndex;
                CargarGrilla();
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
        }
    }
}
